ProfileHeader.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. "use client";
  2. import { UserInfoRep, UserVipInfo, Wallet } from "@/api/user";
  3. import { Link } from "@/i18n";
  4. import { percentage } from "@/utils/methods";
  5. import { ProgressBar } from "antd-mobile";
  6. import { useTranslations } from "next-intl";
  7. import Image from "next/image";
  8. import { Fragment, useState } from "react";
  9. import MaskCom from "./component/MaskCom";
  10. const vipImages = [
  11. { leve: 1, src: "/vip/1.png", color: "#686868" },
  12. { leve: 2, src: "/vip/2-3-4.png", color: "#844C4F" },
  13. { leve: 3, src: "/vip/2-3-4.png", color: "#844C4F" },
  14. { leve: 4, src: "/vip/2-3-4.png", color: "#844C4F" },
  15. { leve: 5, src: "/vip/5-6-7.png", color: "#707386" },
  16. { leve: 6, src: "/vip/5-6-7.png", color: "#707386" },
  17. { leve: 7, src: "/vip/5-6-7.png", color: "#707386" },
  18. { leve: 8, src: "/vip/8-9-10.png", color: "#894622" },
  19. { leve: 9, src: "/vip/8-9-10.png", color: "#894622" },
  20. { leve: 10, src: "/vip/8-9-10.png", color: "#894622" },
  21. ];
  22. type Props = {
  23. userInfo: UserInfoRep;
  24. userMoney: Wallet;
  25. userVip: UserVipInfo;
  26. };
  27. export const ProfileHeader = (props: Props) => {
  28. const { userInfo, userMoney, userVip } = props;
  29. const t = useTranslations("ProfilePage");
  30. const [visible, setVisible] = useState(false);
  31. const callbackFun = () => {
  32. setVisible(!visible);
  33. };
  34. // Vip 图标
  35. const vipIconElement = vipImages.map((item, index) => {
  36. if (item.leve === userVip.vip_level) {
  37. return (
  38. <Fragment key={index}>
  39. <Image src={item.src} alt={"vip"} height={110} width={100} />
  40. <span className={"icon-level"} style={{ color: item.color }}>
  41. {item.leve}
  42. </span>
  43. </Fragment>
  44. );
  45. }
  46. });
  47. return (
  48. <>
  49. <div className={"userContent"}>
  50. <div className={"userInfo"}>
  51. <div>
  52. <div className={"bgImg"}></div>
  53. <div>
  54. <span>{t("Conta")}</span>
  55. <span className="phone">{userInfo?.user_phone || ""}</span>
  56. </div>
  57. </div>
  58. <Link
  59. className="goto iconfont icon-xiangzuo1"
  60. href={`/confirmPassword?userPhone=${userInfo.user_phone}&code=123456&alter=true`}
  61. ></Link>
  62. </div>
  63. {/*vipcard*/}
  64. <div className={"vip-card"}>
  65. <div className={"vip-card__icon"}>{vipIconElement}</div>
  66. <div className={"vip-card-process"}>
  67. {/*<div className={"process-top"}>{userVip.vip_exp}xp</div>*/}
  68. <div>
  69. <ProgressBar
  70. percent={percentage(userVip.vip_exp, userVip.vip_score_exp)}
  71. style={{
  72. "--fill-color": "#fb8b05",
  73. "--track-width": "0.0694rem",
  74. }}
  75. />
  76. </div>
  77. <div className={"process-bottom"}>
  78. <span>VIP{userVip.vip_level}</span>
  79. <span className={"process-bottom-desc"}>
  80. {t("expTips", {
  81. exp: userVip.vip_score_exp - userVip.vip_exp,
  82. })}
  83. </span>
  84. <span>
  85. VIP
  86. {userVip.vip_next_level}
  87. </span>
  88. </div>
  89. </div>
  90. </div>
  91. <div className="coin">
  92. <div>
  93. <span className="iconfont icon-icon-wallet"></span>
  94. <div>
  95. <span>{t("Saldo")}</span>
  96. <div className="num">
  97. <span className="uppercase">brl </span>
  98. <span>{userMoney.Score || 0.0}</span>
  99. </div>
  100. </div>
  101. </div>
  102. <div>
  103. <span className="iconfont icon-gift2"></span>
  104. <div>
  105. <span onClick={() => setVisible(true)}>
  106. {t("Bônus")}{" "}
  107. <Image
  108. className="a"
  109. src="/img/a.png"
  110. alt="question"
  111. width={50}
  112. height={50}
  113. />
  114. </span>
  115. <div className="num">
  116. <span className="uppercase">brl </span>
  117. <span>{userMoney.point || 0.0}</span>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. <div className="link">
  124. <Link href={"/deposit"} className={"btn"}>
  125. {t("Depósito")}
  126. </Link>
  127. <Link className={"btn"} href={"/withdraw"}>
  128. {t("Sacar")}
  129. </Link>
  130. </div>
  131. <MaskCom visible={visible} callbackFun={callbackFun} />
  132. </>
  133. );
  134. };